Pointer (Zeiger)

Um einen Pointer (Zeiger) zu benutzen, schreiben Sie einen * vor den Variablen-Namen. Ein Zeiger ist eine Long-Variable, welche eine Adresse speichert. Er wird generell in Verbindung mit dem Struktur-Typ benutzt. Mit dem Zeiger erhalten Sie Zugriff auf die Struktur.

Beispiel :
*MyScreen.Screen = OpenScreen(0,320,200,8,0)
mouseX = *MyScreen\MouseX ; setzt voraus, dass die Screen Struktur ein MouseX Feld beinhaltet

Es gibt nur drei gⁿltige Methoden, den Wert eines Zeigers zu setzen:
* Erhalt als Ergebnis einer Funktion (wie im obigen Beispiel gezeigt)
* Kopieren des Werts von einem anderen Zeiger
* Ermitteln der Adresse einer Variable, einer Prozedur oder einer Sprungmarke (siehe weiter unten)

Adressen von Variablen

Um die Adresse einer Variable in Ihrem Programmcode zu ermitteln, benutzen Sie das 'at' Symbol (@). Ein ⁿblicher Grund fⁿr die Benutzung dieser Methode ist, wenn Sie die Variable eines Struktur-Typs an eine Prozedur ⁿbergeben wollen. Sie mⁿssen einen Zeiger auf diese Variable ⁿbergeben, da Sie strukturierte Variablen nicht direkt ⁿbergeben k÷nnen.

Beispiel :

Structure astruct
  a.w
  b.l
  c.w
EndStructure

Procedure SetB(*myptr.astruct)
  *myptr\b = 69
EndProcedure

If OpenConsole()
  DefType.astruct myvar
  myvar\b = 0
  SetB( @myvar )
  PrintN(Str(myvar\b))
  Input()
  CloseConsole()
EndIf
End

Adressen von Prozeduren

Normalerweise sind nur fortgeschrittene Programmierer darauf angewiesen, die Adresse einer Prozedur zu ermitteln. Wahrscheinlich ist die hΣufigste Ursache fⁿr das Ermitteln einer Adresse, wenn auf "low-level" Ebene mit dem OS gearbeitet werden soll. Einige OS erlauben "Callback"- oder "Hook"-Funktionen (fⁿr einige Operationen) zu definieren, welche durch das OS aufgerufen werden und dem Programmierer den Ausbau der FΣhigkeiten der betreffenden OS-Routine erm÷glichen. Die Adresse einer Prozedur wird auf Σhnliche Art und Weise wie bei Variablen ermittelt.

Beispiel :

Procedure WindowCB(WindowID.l, Message.l, wParam.l, lParam.l)
  ; Hier wird Ihre Callback Prozedur abgearbeitet.
EndProcedure

; Ein spezielles Callback fⁿr Windows OS erm÷glicht die Verarbeitung von Window-Ereignissen.
SetWindowCallback( @WindowCB() )

Adressen von Sprungmarken (Labels)

Es kann auch nⁿtzlich sein, die Adresse einer Sprungmarke innerhalb Ihres Programmcodes zu ermitteln. Dies ist m÷glich, wenn Sie Zugriff auf an dieser Sprungmarke gespeicherten Code oder Daten erhalten m÷chten. Oder jede andere gute M÷glichkeit, die Sie sich vorstellen k÷nnen. Um die Adresse einer Sprungmarke zu ermitteln, schreiben Sie ein Fragezeichen (?) vor den Namen der Sprungmarke.

Beispiel :

If OpenConsole()
  PrintN("Gr÷▀e der Daten = " + Str(?endofmydata - ?mydata))
  Input()
  CloseConsole()
EndIf
End

mydata:
IncludeBinary "somefile.bin"
endofmydata: